package me.android.library.utils.android;

import android.content.Context;
import android.content.res.TypedArray;
import android.os.Build;
import android.util.AttributeSet;

import java.util.function.Consumer;

import lombok.experimental.UtilityClass;

@UtilityClass
public class TypedArrayUtil {

    public void obtainStyledAttrs(Context context, int[] attrs, Consumer<TypedArray> consumer) {
        TypedArray typedArray = null;
        try {
            typedArray = context.obtainStyledAttributes(attrs);
            consumer.accept(typedArray);
        } finally {
            dispose(typedArray);
        }
    }

    public void obtainStyledAttrs(Context context, AttributeSet attributeSet, int[] attrs, Consumer<TypedArray> consumer) {
        TypedArray typedArray = null;
        try {
            typedArray = context.obtainStyledAttributes(attributeSet, attrs);
            consumer.accept(typedArray);
        } finally {
            dispose(typedArray);
        }
    }

    public void obtainStyledAttrs(Context context, AttributeSet attributeSet, int[] attrs,
                                  int defStyleAttr, int defStyleRes, Consumer<TypedArray> consumer) {
        TypedArray typedArray = null;
        try {
            typedArray = context.obtainStyledAttributes(attributeSet, attrs, defStyleAttr, defStyleRes);
            consumer.accept(typedArray);
        } finally {
            dispose(typedArray);
        }
    }

    private void dispose(TypedArray typedArray) {
        if (typedArray != null) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
                typedArray.close(); // API 31+ 使用 close()
            } else {
                typedArray.recycle(); // API < 31 使用 recycle()
            }
        }
    }


}
